package br.com.sgac.controler;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;


import br.com.sgac.dao.FuncionalidadeDAO;
import br.com.sgac.model.Funcionalidade;

/**
 * Servlet implementation class FuncionalidadeServlet
 */
@WebServlet("/FuncionalidadeServlet")
public class FuncionalidadeServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	FuncionalidadeDAO funcionalidadeDAO = new FuncionalidadeDAO();
    /**
     * @see HttpServlet#HttpServlet()
     */
    public FuncionalidadeServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		List<Funcionalidade> funcionalidades = new ArrayList<Funcionalidade>();
		Funcionalidade funcionalidade = new Funcionalidade();
		String editar = request.getParameter("editar");
		
		funcionalidades = funcionalidadeDAO.findAll();
		request.setAttribute("funcionalidades", funcionalidades);
		
		if(editar != null){
			funcionalidade = funcionalidadeDAO.findyByFuncionalidadeId(editar);
			request.setAttribute("funcionalidadeEditar", funcionalidade);
			request.setAttribute("acao", "Alterar");
		
		}else{
			request.setAttribute("funcionalidadeEditar", funcionalidade);
			request.setAttribute("acao", "Cadastrar");
		}

		RequestDispatcher rd = request.getRequestDispatcher("app/FormCadFuncionalidades.jsp");
		rd.forward(request, response);

	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		Funcionalidade funcionalidade = new Funcionalidade();
		Funcionalidade subFuncionalidade = new Funcionalidade();
		
		String acao = request.getParameter("acao");
		String idFuncionalidade = request.getParameter("id");
		funcionalidade = (Funcionalidade)request.getAttribute("funcionalidadeEditar");
		funcionalidadeDAO.begin();

		if(acao.equals("Cadastrar")){
			Funcionalidade funcionalidadeCad = new Funcionalidade();
			funcionalidadeCad.setDescricaoFuncionalidade(funcionalidade.getDescricaoFuncionalidade());
			funcionalidadeCad.setPagina(funcionalidade.getPagina());
			if(funcionalidade.getIdFuncionalidadeFilhas() != null){
				for(String f:funcionalidade.getIdFuncionalidadeFilhas()){
					subFuncionalidade = funcionalidadeDAO.findyByFuncionalidadeId(f);
					funcionalidadeCad.addFuncionalidade(subFuncionalidade);
				}
			}
			funcionalidadeDAO.persist(funcionalidadeCad);
		}else if(acao.equals("Alterar")){
			
			if(funcionalidade.getIdFuncionalidadeFilhas() != null){
				for(String f:funcionalidade.getIdFuncionalidadeFilhas()){
					subFuncionalidade = funcionalidadeDAO.findyByFuncionalidadeId(f);
					funcionalidade.addFuncionalidade(subFuncionalidade);
				}
			}
			funcionalidadeDAO.merge(funcionalidade);
			
		}
		
		funcionalidadeDAO.commit();
		funcionalidadeDAO.close();
		doGet(request, response);
		
	}

}

